#!/usr/bin/env python3

"""
文本处理模块使用示例

演示如何使用文本处理服务进行文本分类和摘要生成
"""

import asyncio
import json
import os
import sys
from pathlib import Path

# 添加项目路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root / "src"))

from speech_convert.text_processing.schemas import TextInput
from speech_convert.text_processing.services import TextProcessingService


async def example_single_text_processing():
    """示例：单文本处理"""
    print("\n=== 单文本处理示例 ===")

    # 创建服务实例
    service = TextProcessingService()

    # 示例文本（会议记录）
    meeting_text = """
    今天上午9点，我们召开了第三季度项目总结会议。参会人员包括项目经理张三、
    技术负责人李四、测试工程师王五以及产品经理赵六。

    会议主要讨论了以下议题：
    1. 项目进度回顾：当前开发进度为85%，比计划提前了一周
    2. 技术方案评估：决定采用微服务架构替换现有的单体架构
    3. 资源分配调整：增加2名前端开发人员，由李四负责招聘
    4. 下阶段计划：确定在本月底完成核心功能开发，下月初进入测试阶段

    会议决定设立专门的技术委员会来评估新的架构方案，由张三和李四共同负责。
    同时，要求所有团队成员在下周五前提交个人工作总结。

    存在的主要问题包括：数据库性能瓶颈、前端组件库兼容性、第三方API稳定性。
    针对这些问题，会议制定了相应的解决方案和时间表。
    """

    try:
        # 处理文本
        print("正在处理文本...")
        result = await service.process_text(
            text=meeting_text.strip(),
            enable_classification=True,
            enable_summary=True,
            user_id="demo_user",
            session_id="demo_session_001"
        )

        # 输出结果
        print(f"处理耗时: {result.processing_time:.2f}秒")
        print(f"使用模型: {result.model_versions}")

        print("\n--- 文本分类结果 ---")
        for i, classification in enumerate(result.classifications, 1):
            print(f"{i}. 类型: {classification.label}")
            print(f"   置信度: {classification.confidence:.2f}")
            print(f"   内容: {classification.text_segment[:80]}...")
            print()

        if result.summary:
            print("--- 摘要生成结果 ---")
            print(f"摘要:\n{result.summary.summary}")
            print(f"\n关键要点:")
            for i, point in enumerate(result.summary.key_points, 1):
                print(f"{i}. {point}")
            print(f"\n摘要字数: {result.summary.word_count}")

    except Exception as e:
        print(f"处理失败: {str(e)}")
    finally:
        # 清理资源
        service.cleanup()


async def example_batch_processing():
    """示例：批量文本处理"""
    print("\n=== 批量文本处理示例 ===")

    service = TextProcessingService()

    # 多个文本示例
    texts = {
        "meeting_1": "产品团队今天讨论了用户反馈，决定优化界面设计，由设计师小明负责执行。",
        "meeting_2": "技术团队遇到了数据库性能问题，需要进行架构优化，预计下周完成方案设计。",
        "meeting_3": "市场部汇报了最新的销售数据，Q3销售额同比增长15%，建议加大推广投入。"
    }

    try:
        print(f"正在批量处理 {len(texts)} 个文本...")
        results = await service.process_batch(
            texts=texts,
            enable_classification=True,
            enable_summary=True
        )

        print(f"批量处理完成，成功处理 {len(results)} 个文本")

        for text_id, result in results.items():
            print(f"\n--- {text_id} ---")
            print(f"原文: {result.original_text[:60]}...")

            if result.classifications:
                print(f"分类: {result.classifications[0].label} (置信度: {result.classifications[0].confidence:.2f})")

            if result.summary:
                print(f"摘要: {result.summary.summary}")

            print(f"处理时间: {result.processing_time:.2f}秒")

    except Exception as e:
        print(f"批量处理失败: {str(e)}")
    finally:
        service.cleanup()


async def example_classification_only():
    """示例：仅文本分类"""
    print("\n=== 仅文本分类示例 ===")

    service = TextProcessingService()

    test_texts = [
        "我们需要立即解决服务器的性能问题。",
        "会议决定下周开始新项目的开发工作。",
        "大家对新的UI设计有什么看法和建议？",
        "这次的市场调研结果显示用户满意度很高。",
        "总结一下今天讨论的主要内容和结论。"
    ]

    try:
        for i, text in enumerate(test_texts, 1):
            print(f"\n{i}. 分析文本: {text}")

            result = await service.process_text(
                text=text,
                enable_classification=True,
                enable_summary=False  # 仅分类，不生成摘要
            )

            if result.classifications:
                cls = result.classifications[0]
                print(f"   分类结果: {cls.label} (置信度: {cls.confidence:.2f})")
            else:
                print("   未找到分类结果")

    except Exception as e:
        print(f"分类失败: {str(e)}")
    finally:
        service.cleanup()


async def example_summary_only():
    """示例：仅摘要生成"""
    print("\n=== 仅摘要生成示例 ===")

    service = TextProcessingService()

    long_text = """
    本次年度总结会议历时3小时，全面回顾了公司2023年的发展情况。

    业务发展方面，公司总营收达到5000万元，同比增长28%。其中，核心产品线贡献了60%的收入，
    新产品线虽然起步较晚，但增长迅速，已占总收入的25%。客户满意度调查显示，
    整体满意度达到4.2/5.0，相比去年提升了0.3个点。

    技术创新方面，研发团队今年完成了3个重大技术升级项目，申请了5项专利，
    其中2项已获得授权。新技术的应用使产品性能提升了40%，用户响应时间缩短了50%。

    团队建设方面，公司员工总数从年初的150人增长到200人，其中技术人员占比60%。
    实施了新的绩效考核体系，员工满意度显著提升。培训投入增加了30%，
    举办了20场内部技术分享会。

    市场拓展方面，新增了5个重要合作伙伴，进入了3个新的地理市场。
    品牌影响力不断提升，在行业内的知名度排名从第8位上升到第4位。

    展望2024年，公司将继续专注于技术创新和市场拓展，目标是实现营收增长35%，
    并启动IPO筹备工作。
    """

    try:
        print("正在生成摘要...")
        result = await service.process_text(
            text=long_text.strip(),
            enable_classification=False,  # 不分类
            enable_summary=True
        )

        if result.summary:
            print("--- 生成的摘要 ---")
            print(result.summary.summary)

            print("\n--- 关键要点 ---")
            for i, point in enumerate(result.summary.key_points, 1):
                print(f"{i}. {point}")

            print(f"\n摘要字数: {result.summary.word_count}")
            print(f"压缩比: {len(result.original_text)/result.summary.word_count:.1f}:1")

    except Exception as e:
        print(f"摘要生成失败: {str(e)}")
    finally:
        service.cleanup()


async def example_health_check():
    """示例：服务健康检查"""
    print("\n=== 服务健康检查示例 ===")

    service = TextProcessingService()

    try:
        health = await service.get_health_status()

        print(f"服务状态: {health['status']}")
        print(f"运行时间: {health['uptime']:.1f}秒")

        print("\n模型加载状态:")
        for model_name, loaded in health['models_loaded'].items():
            status = "✓ 已加载" if loaded else "✗ 未加载"
            print(f"  {model_name}: {status}")

        if 'memory_usage' in health:
            memory = health['memory_usage']
            print(f"\n内存使用情况:")
            print(f"  进程内存: {memory.get('process_memory_mb', 0):.1f} MB")
            print(f"  系统内存使用率: {memory.get('system_memory_percent', 0):.1f}%")
            print(f"  系统可用内存: {memory.get('system_available_mb', 0):.1f} MB")

    except Exception as e:
        print(f"健康检查失败: {str(e)}")


async def example_error_handling():
    """示例：错误处理"""
    print("\n=== 错误处理示例 ===")

    service = TextProcessingService()

    # 测试各种错误情况
    error_cases = [
        ("空文本", ""),
        ("过短文本", "短"),
        ("过长文本", "测试" * 5000),
    ]

    for case_name, text in error_cases:
        try:
            print(f"\n测试 {case_name}...")
            result = await service.process_text(text)
            print(f"意外成功: {result}")
        except ValueError as e:
            print(f"预期的验证错误: {str(e)}")
        except Exception as e:
            print(f"其他错误: {str(e)}")

    service.cleanup()


async def main():
    """主函数：运行所有示例"""
    print("🚀 文本处理模块使用示例")
    print("=" * 50)

    examples = [
        ("单文本处理", example_single_text_processing),
        ("批量文本处理", example_batch_processing),
        ("仅文本分类", example_classification_only),
        ("仅摘要生成", example_summary_only),
        ("健康检查", example_health_check),
        ("错误处理", example_error_handling),
    ]

    for name, func in examples:
        try:
            print(f"\n{'='*20} {name} {'='*20}")
            await func()
        except Exception as e:
            print(f"{name} 示例执行失败: {str(e)}")

        # 等待一下再执行下一个示例
        await asyncio.sleep(1)

    print(f"\n{'='*50}")
    print("✅ 所有示例执行完成")


if __name__ == "__main__":
    # 运行示例
    asyncio.run(main())
